home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok59.lha / AmokEd_V1.02b / txt / EdSecureDos.mod < prev    next >
Text File  |  1993-08-15  |  3KB  |  171 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Library Module: SecureDos     Date: 13 Sep 1991 22:54:04
  4.     Adapted for AmokEd!!
  5.                                                                            *)
  6. (*   © 1990 by Fridtjof Siebert                                            *)
  7. (*                                                                         *)
  8. (*-------------------------------------------------------------------------*)
  9.  
  10. (* modified for AmokEd      24 May 1991 [hG]  *)
  11.  
  12. MODULE EdSecureDos;
  13.  
  14. IMPORT d*: Dos,
  15.        e:  Exec,
  16.        l:  EdLists,  (* the only change, but makes AmokEd smaller *)
  17.        ol: OberonLib,
  18.        s:SYSTEM;
  19.  
  20. VAR
  21.   Me * : d.ProcessPtr;
  22.  
  23. TYPE
  24.   FHNodePtr = POINTER TO FHNode;
  25.   FHNode = STRUCT (node: l.Node)
  26.     fh: d.FileHandlePtr
  27.   END;
  28.   LockNodePtr = POINTER TO LockNode;
  29.   LockNode = STRUCT (node: l.Node)
  30.     lock: d.FileLockPtr
  31.   END;
  32.  
  33. VAR
  34.   fhlist: l.List;
  35.   locklist: l.List;
  36.   oldCurrentDir*: d.FileLockPtr;
  37.   Sigs: LONGSET;
  38.  
  39.  
  40. PROCEDURE Open*(name: ARRAY OF CHAR;                    (* $CopyArrays- *)
  41.                accessMode: LONGINT): d.FileHandlePtr;
  42.  
  43. VAR
  44.   el: FHNodePtr;
  45.  
  46. BEGIN
  47.   NEW(el);
  48.   IF el=NIL THEN RETURN NIL END;
  49.   el.fh := d.Open(name,accessMode);
  50.   IF el.fh=NIL THEN
  51.     DISPOSE(el);
  52.     RETURN NIL
  53.   END;
  54.   l.AddHead(fhlist,el);
  55.   RETURN el.fh;
  56. END Open;
  57.  
  58.  
  59. PROCEDURE Close*(file: d.FileHandlePtr);
  60.  
  61. VAR el: l.NodePtr;
  62.  
  63. BEGIN
  64.   el := l.Head(fhlist);
  65.   REPEAT
  66.     IF el(FHNode).fh=file THEN
  67.       l.Remove(fhlist,el);
  68.       d.OldClose(file);
  69.       DISPOSE(el);
  70.       RETURN;
  71.     END;
  72.   UNTIL NOT l.Next(el);
  73.   HALT(20);  (* File gar nicht offen! *)
  74. END Close;
  75.  
  76.  
  77. PROCEDURE Lock*(name: ARRAY OF CHAR;                   (* $CopyArrays- *)
  78.                 accessMode: LONGINT): d.FileLockPtr;
  79.  
  80. VAR el: LockNodePtr;
  81.  
  82. BEGIN
  83.   NEW(el);
  84.   IF el=NIL THEN RETURN NIL END;
  85.   el.lock := d.Lock(name,accessMode);
  86.   IF el.lock=NIL THEN DISPOSE(el); RETURN NIL END;
  87.   l.AddHead(locklist,el);
  88.   RETURN el.lock;
  89. END Lock;
  90.  
  91.  
  92. PROCEDURE AddLock(lock: d.FileLockPtr): d.FileLockPtr;
  93. VAR el: LockNodePtr;
  94. BEGIN
  95.   IF lock#NIL THEN
  96.     NEW(el);
  97.     IF el#NIL THEN
  98.       el.lock := lock;
  99.       l.AddHead(locklist,el);
  100.       RETURN lock;
  101.     END;
  102.     d.UnLock(lock);
  103.   END;
  104.   RETURN NIL;
  105. END AddLock;
  106.  
  107.  
  108. PROCEDURE ParentDir*(lock: d.FileLockPtr): d.FileLockPtr;
  109. BEGIN
  110.   RETURN AddLock(d.ParentDir(lock));
  111. END ParentDir;
  112.  
  113.  
  114. PROCEDURE DupLock*(lock: d.FileLockPtr): d.FileLockPtr;
  115. BEGIN
  116.   RETURN AddLock(d.DupLock(lock));
  117. END DupLock;
  118.  
  119.  
  120. PROCEDURE CreateDir*(name: ARRAY OF CHAR): d.FileLockPtr;  (* $CopyArrays- *)
  121. BEGIN
  122.   RETURN AddLock(d.CreateDir(name));
  123. END CreateDir;
  124.  
  125.  
  126. PROCEDURE UnLock*(lock: d.FileLockPtr);
  127. VAR el: l.NodePtr;
  128. BEGIN
  129.   el := l.Head(locklist);
  130.   REPEAT
  131.     IF el(LockNode).lock=lock THEN
  132.       l.Remove(locklist,el);
  133.       d.UnLock(lock);
  134.       DISPOSE(el);
  135.       RETURN;
  136.     END;
  137.   UNTIL NOT l.Next(el);
  138.   HALT(20);  (* existiert nicht ! *)
  139. END UnLock;
  140.  
  141.  
  142. PROCEDURE * CloseIt(n: l.NodePtr);
  143. BEGIN
  144.   d.OldClose(n(FHNode).fh)
  145. END CloseIt;
  146.  
  147.  
  148. PROCEDURE * UnLockIt(n: l.NodePtr);
  149. BEGIN
  150.   d.UnLock(n(LockNode).lock);
  151. END UnLockIt;
  152.  
  153.  
  154. BEGIN
  155.  
  156.   Me := s.VAL(d.ProcessPtr,ol.Me);
  157.   oldCurrentDir := Me.currentDir;
  158.  
  159.   l.Init(fhlist);
  160.   l.Init(locklist);
  161.  
  162. CLOSE
  163.  
  164.   IF d.CurrentDir(oldCurrentDir)=NIL THEN END;
  165.  
  166.   l.DoForward(fhlist,CloseIt);
  167.   l.DoForward(locklist,UnLockIt);
  168.  
  169. END EdSecureDos.
  170.  
  171.